1
問題求解代理簡介
PolyU COMP5511Lecture 2
00:00

從反射到規劃

在代理設計的演進中,我們從 反射式代理(根據簡單規則將感知直接對應到動作,例如「若前方汽車煞車,則啟動煞車」)過渡到 問題求解代理。反射式代理僅依賴當下情境運作,而問題求解代理是 基於目標。它們會考量行動的未來後果,以找出能滿足特定目標的動作序列。

  • 反射式代理: $Action = Function(Percept)$
  • 規劃代理: $Action\_Sequence = Search(State, Goal)$

原子狀態表徵

在這一基礎層級,代理採用 原子表徵。這意味著世界狀態被視為一個黑箱——一個對搜尋演算法而言內部結構不可見的單一節點。代理僅針對下列事項進行推理:

  • 狀態($S$): 環境的快照。
  • 動作($A$): 狀態之間的轉換。
  • 目標測試: 檢查狀態 $s \in S_{goal}$ 是否成立的布林判斷。

問題求解迴圈

問題求解代理遵循一個明確的四步驟循環來探索環境:

  1. 目標制定: 根據當前情境決定要追求的目標。
  2. 問題制定: 將真實世界抽象為數學模型(狀態與動作)。
  3. 搜尋: 模擬動作序列以找出 最優路徑
  4. 執行: 執行搜尋階段所發現的動作,不需再做進一步的思考(假設環境為靜態)。
Python 實作(agent_types.py)
1
class ReflexAgent:
2
defact(self, percept):
3
# Direct mapping: Rule -> Action
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__(self):
8
self.seq = [] # Buffered action sequence
9
10
defact(self, percept):
11
# If we are mid-execution, continue
12
ifself.seq:
13
returnself.seq.pop(0)
14
15
# Otherwise, Plan (Search)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# Search returns a list of actions
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop(0)